6132bb7d4187ac03f36146226e7ffc8555184822
[openwrt/openwrt.git] /
1 From 0daa521a1c8c29ffbefe6530f0d276e74e2749d0 Mon Sep 17 00:00:00 2001
2 From: Ping-Ke Shih <pkshih@realtek.com>
3 Date: Thu, 12 Dec 2024 13:42:03 +0800
4 Subject: [PATCH] wifi: rtw88: add __packed attribute to efuse layout struct
5
6 The layout struct of efuse should not do address alignment by compiler.
7 Otherwise it leads unexpected layout and size for certain arch suc as arm.
8 In x86-64, the results are identical before and after this patch.
9
10 Also adjust bit-field to prevent over adjacent byte to avoid warning:
11 rtw88/rtw8822b.h:66:1: note: offset of packed bit-field `res2` has changed in GCC 4.4
12 66 | } __packed;
13 | ^
14
15 Reported-by: kernel test robot <lkp@intel.com>
16 Closes: https://lore.kernel.org/oe-kbuild-all/202412120131.qk0x6OhE-lkp@intel.com/
17 Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
18 Link: https://patch.msgid.link/20241212054203.135046-1-pkshih@realtek.com
19 ---
20 drivers/net/wireless/realtek/rtw88/main.h | 4 ++--
21 drivers/net/wireless/realtek/rtw88/rtw8723x.h | 8 ++++----
22 drivers/net/wireless/realtek/rtw88/rtw8821c.h | 9 +++++----
23 drivers/net/wireless/realtek/rtw88/rtw8822b.h | 9 +++++----
24 drivers/net/wireless/realtek/rtw88/rtw8822c.h | 9 +++++----
25 5 files changed, 21 insertions(+), 18 deletions(-)
26
27 --- a/drivers/net/wireless/realtek/rtw88/main.h
28 +++ b/drivers/net/wireless/realtek/rtw88/main.h
29 @@ -510,12 +510,12 @@ struct rtw_5g_txpwr_idx {
30 struct rtw_5g_vht_ns_pwr_idx_diff vht_2s_diff;
31 struct rtw_5g_vht_ns_pwr_idx_diff vht_3s_diff;
32 struct rtw_5g_vht_ns_pwr_idx_diff vht_4s_diff;
33 -};
34 +} __packed;
35
36 struct rtw_txpwr_idx {
37 struct rtw_2g_txpwr_idx pwr_idx_2g;
38 struct rtw_5g_txpwr_idx pwr_idx_5g;
39 -};
40 +} __packed;
41
42 struct rtw_channel_params {
43 u8 center_chan;
44 --- a/drivers/net/wireless/realtek/rtw88/rtw8723x.h
45 +++ b/drivers/net/wireless/realtek/rtw88/rtw8723x.h
46 @@ -47,7 +47,7 @@ struct rtw8723xe_efuse {
47 u8 device_id[2];
48 u8 sub_vendor_id[2];
49 u8 sub_device_id[2];
50 -};
51 +} __packed;
52
53 struct rtw8723xu_efuse {
54 u8 res4[48]; /* 0xd0 */
55 @@ -56,12 +56,12 @@ struct rtw8723xu_efuse {
56 u8 usb_option; /* 0x104 */
57 u8 res5[2]; /* 0x105 */
58 u8 mac_addr[ETH_ALEN]; /* 0x107 */
59 -};
60 +} __packed;
61
62 struct rtw8723xs_efuse {
63 u8 res4[0x4a]; /* 0xd0 */
64 u8 mac_addr[ETH_ALEN]; /* 0x11a */
65 -};
66 +} __packed;
67
68 struct rtw8723x_efuse {
69 __le16 rtl_id;
70 @@ -96,7 +96,7 @@ struct rtw8723x_efuse {
71 struct rtw8723xu_efuse u;
72 struct rtw8723xs_efuse s;
73 };
74 -};
75 +} __packed;
76
77 #define RTW8723X_IQK_ADDA_REG_NUM 16
78 #define RTW8723X_IQK_MAC8_REG_NUM 3
79 --- a/drivers/net/wireless/realtek/rtw88/rtw8821c.h
80 +++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
81 @@ -27,7 +27,7 @@ struct rtw8821cu_efuse {
82 u8 res11[0xcf];
83 u8 package_type; /* 0x1fb */
84 u8 res12[0x4];
85 -};
86 +} __packed;
87
88 struct rtw8821ce_efuse {
89 u8 mac_addr[ETH_ALEN]; /* 0xd0 */
90 @@ -47,7 +47,8 @@ struct rtw8821ce_efuse {
91 u8 ltr_en:1;
92 u8 res1:2;
93 u8 obff:2;
94 - u8 res2:3;
95 + u8 res2_1:1;
96 + u8 res2_2:2;
97 u8 obff_cap:2;
98 u8 res3:4;
99 u8 res4[3];
100 @@ -63,7 +64,7 @@ struct rtw8821ce_efuse {
101 u8 res6:1;
102 u8 port_t_power_on_value:5;
103 u8 res7;
104 -};
105 +} __packed;
106
107 struct rtw8821cs_efuse {
108 u8 res4[0x4a]; /* 0xd0 */
109 @@ -101,7 +102,7 @@ struct rtw8821c_efuse {
110 struct rtw8821cu_efuse u;
111 struct rtw8821cs_efuse s;
112 };
113 -};
114 +} __packed;
115
116 static inline void
117 _rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data)
118 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h
119 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
120 @@ -27,7 +27,7 @@ struct rtw8822bu_efuse {
121 u8 res11[0xcf];
122 u8 package_type; /* 0x1fb */
123 u8 res12[0x4];
124 -};
125 +} __packed;
126
127 struct rtw8822be_efuse {
128 u8 mac_addr[ETH_ALEN]; /* 0xd0 */
129 @@ -47,7 +47,8 @@ struct rtw8822be_efuse {
130 u8 ltr_en:1;
131 u8 res1:2;
132 u8 obff:2;
133 - u8 res2:3;
134 + u8 res2_1:1;
135 + u8 res2_2:2;
136 u8 obff_cap:2;
137 u8 res3:4;
138 u8 res4[3];
139 @@ -63,7 +64,7 @@ struct rtw8822be_efuse {
140 u8 res6:1;
141 u8 port_t_power_on_value:5;
142 u8 res7;
143 -};
144 +} __packed;
145
146 struct rtw8822bs_efuse {
147 u8 res4[0x4a]; /* 0xd0 */
148 @@ -103,7 +104,7 @@ struct rtw8822b_efuse {
149 struct rtw8822bu_efuse u;
150 struct rtw8822bs_efuse s;
151 };
152 -};
153 +} __packed;
154
155 static inline void
156 _rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data)
157 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h
158 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
159 @@ -14,7 +14,7 @@ struct rtw8822cu_efuse {
160 u8 res1[3];
161 u8 mac_addr[ETH_ALEN]; /* 0x157 */
162 u8 res2[0x3d];
163 -};
164 +} __packed;
165
166 struct rtw8822cs_efuse {
167 u8 res0[0x4a]; /* 0x120 */
168 @@ -39,7 +39,8 @@ struct rtw8822ce_efuse {
169 u8 ltr_en:1;
170 u8 res1:2;
171 u8 obff:2;
172 - u8 res2:3;
173 + u8 res2_1:1;
174 + u8 res2_2:2;
175 u8 obff_cap:2;
176 u8 res3:4;
177 u8 class_code[3];
178 @@ -55,7 +56,7 @@ struct rtw8822ce_efuse {
179 u8 res6:1;
180 u8 port_t_power_on_value:5;
181 u8 res7;
182 -};
183 +} __packed;
184
185 struct rtw8822c_efuse {
186 __le16 rtl_id;
187 @@ -102,7 +103,7 @@ struct rtw8822c_efuse {
188 struct rtw8822cu_efuse u;
189 struct rtw8822cs_efuse s;
190 };
191 -};
192 +} __packed;
193
194 enum rtw8822c_dpk_agc_phase {
195 RTW_DPK_GAIN_CHECK,